package cn.iocoder.yudao.module.ai.service.datasetmark;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.ai.controller.admin.datasetmark.vo.*;
import cn.iocoder.yudao.module.ai.dal.dataobject.datasetmark.DatasetLableFilecountDO;
import cn.iocoder.yudao.module.ai.dal.dataobject.datasetmark.DatasetMarkDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;

/**
 * 数据集标注行 Service 接口
 *
 * @author 侯俊青
 */
public interface DatasetMarkService {

    /**
     * 创建数据集标注行
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createDatasetMark(@Valid DatasetMarkSaveReqVO createReqVO);

    /**
     * 更新数据集标注行
     *
     * @param updateReqVO 更新信息
     */
    void updateDatasetMark(@Valid DatasetMarkSaveReqVO updateReqVO);

    /**
     * 删除数据集标注行
     *
     * @param id 编号
     */
    void deleteDatasetMark(Long id);

    /**
     * 获得数据集标注行
     *
     * @param id 编号
     * @return 数据集标注行
     */
    DatasetMarkDO getDatasetMark(Long id);

    /**
     * 获得数据集标注行分页
     *
     * @param pageReqVO 分页查询
     * @return 数据集标注行分页
     */
    PageResult<DatasetMarkDO> getDatasetMarkPage(DatasetMarkPageReqVO pageReqVO);

    /**
     * 获得数据集标注行列表
     *
     * @param markFileId
     * @return 数据集标注行
     */
    List<DatasetMarkDO> getMarkListByMarkFileId(Long markFileId);

    /**
     * 获得数据集标注行列表
     *
     * @param datasetId
     * @return 数据集标注行
     */
    List<DatasetMarkDO> getMarkListByDatasetId(Long datasetId);

    /**
     * 获得数据集标注行列表
     *
     * @param originalFileId 原始文件编号
     * @return 数据集标注行列表
     */
    List<DatasetMarkDO> getMarkListByOriginalFileId(Long originalFileId);

    /**
     * 获得数据集标注行列表
     *
     * @param originalFileIdList 原始文件编号列表
     * @return 数据集标注行列表
     */
    List<DatasetMarkDO> getMarkListByOriginalFileIdList(List<Long> originalFileIdList);

    /**
     * 根据数据集编号删除数据集标注行
     * @param datasetId
     */
    void deleteByDatasetId(Long datasetId);

    List<DatasetLableFilecountDO> groupFileCountByLabelId(Long datasetId);
}